<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Dataflow</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Dataflow"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Dataflow rootpage-Dataflow skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Dataflow</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">This article is about software engineering. For the flow of data within a computer network, see <a href="Traffic_flow_(computer_networking)" title="Traffic flow (computer networking)">Traffic flow (computer networking)</a>. For the graphical representation of flow of data within an information system, see <a href="Data_flow_diagram" class="mw-redirect" title="Data flow diagram">data flow diagram</a>. For the hardware architecture, see <a href="Dataflow_architecture" title="Dataflow architecture">Dataflow architecture</a>. For the Dubai-based company, see <a href="DataFlow_Group" title="DataFlow Group">DataFlow Group</a>.</div>
<style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1248332772">
/* start https://en.wikipedia.org/ */
.mw-parser-output .multiple-issues-text{width:95%;margin:0.2em 0}.mw-parser-output .multiple-issues-text>.mw-collapsible-content{margin-top:0.3em}.mw-parser-output .compact-ambox .ambox{border:none;border-collapse:collapse;background-color:transparent;margin:0 0 0 1.6em!important;padding:0!important;width:auto;display:block}body.mediawiki .mw-parser-output .compact-ambox .ambox.mbox-small-left{font-size:100%;width:auto;margin:0}.mw-parser-output .compact-ambox .ambox .mbox-text{padding:0!important;margin:0!important}.mw-parser-output .compact-ambox .ambox .mbox-text-span{display:list-item;line-height:1.5em;list-style-type:disc}body.skin-minerva .mw-parser-output .multiple-issues-text>.mw-collapsible-toggle,.mw-parser-output .compact-ambox .ambox .mbox-image,.mw-parser-output .compact-ambox .ambox .mbox-imageright,.mw-parser-output .compact-ambox .ambox .mbox-empty-cell,.mw-parser-output .compact-ambox .hide-when-compact{display:none}
/* end https://en.wikipedia.org/ */
</style>
<p>In <a href="Computing" title="Computing">computing</a>, <b>dataflow</b> is a broad concept, which has various meanings depending on the application and context. In the context of <a href="Software_architecture" title="Software architecture">software architecture</a>, data flow relates to <a href="Stream_processing" title="Stream processing">stream processing</a> or <a href="Reactive_programming" title="Reactive programming">reactive programming</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Software_architecture">Software architecture</h2></div>
<p><a href="Dataflow_programming" title="Dataflow programming">Dataflow computing</a> is a software paradigm based on the idea of representing computations as a <a href="Directed_graph" title="Directed graph">directed graph</a>, where nodes are computations and data flow along the edges.<sup id="cite_ref-sig_1-0" class="reference"><a href="#cite_note-sig-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Dataflow can also be called <a href="Stream_processing" title="Stream processing">stream processing</a> or <a href="Reactive_programming" title="Reactive programming">reactive programming</a>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>There have been multiple data-flow/stream processing languages of various forms (see <a href="Stream_processing" title="Stream processing">Stream processing</a>). Data-flow hardware (see <a href="Dataflow_architecture" title="Dataflow architecture">Dataflow architecture</a>) is an alternative to the classic <a href="Von_Neumann_architecture" title="Von Neumann architecture">von Neumann architecture</a>. The most obvious example of data-flow programming is the subset known as <a href="Reactive_programming" title="Reactive programming">reactive programming</a> with spreadsheets. As a user enters new values, they are instantly transmitted to the next logical "actor" or formula for calculation.
</p><p><a href="Distributed_data_flow" title="Distributed data flow">Distributed data flows</a> have also been proposed as a programming abstraction that captures the dynamics of distributed multi-protocols. The data-centric perspective characteristic of data flow programming promotes high-level functional specifications and simplifies formal reasoning about system components.
</p>
<div class="mw-heading mw-heading2"><h2 id="Hardware_architecture">Hardware architecture</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Dataflow_architecture" title="Dataflow architecture">Dataflow architecture</a></div>
<p>Hardware architectures for dataflow was a major topic in <a href="Computer_architecture" title="Computer architecture">computer architecture</a> research in the 1970s and early 1980s. <a href="Jack_Dennis" title="Jack Dennis">Jack Dennis</a> of the <a href="Massachusetts_Institute_of_Technology" title="Massachusetts Institute of Technology">Massachusetts Institute of Technology</a> (MIT) pioneered the field of static dataflow architectures. Designs that use conventional memory addresses as data dependency tags are called static dataflow machines. These machines did not allow multiple instances of the same routines to be executed simultaneously because the simple tags could not differentiate between them. Designs that use <a href="Content-addressable_memory" title="Content-addressable memory">content-addressable memory</a> are called dynamic dataflow machines by <a href="Arvind_(computer_scientist)" title="Arvind (computer scientist)">Arvind</a>. They use tags in memory to facilitate parallelism.
Data flows around the computer through the components of the computer. It gets entered from the input devices and can leave through output devices (printer etc.). An example for a hardware structure like in a dataflow machine can be found in analog computers or more precisely differential analyzers.
</p>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Spatial_architecture" title="Spatial architecture">Spatial architecture</a></div>
<p>In <a href="Hardware_accelerators" class="mw-redirect" title="Hardware accelerators">hardware accelerators</a> composed of many processing elements that collectively coordinate to parallelize a <a href="Compute_kernel" title="Compute kernel">compute kernel</a>, dataflow refers to the pattern in which data is transferred between processing elements to satisfy data dependencies and complete the computation.
These architectures inherit many of the concepts of dataflow architectures and apply them to more specialized workloads, such as <a href="AI_accelerator" class="mw-redirect" title="AI accelerator">AI acceleration</a>.
However, unlike dataflow architectures, the computation is not actively driven by data dependencies, rather, the simple data dependencies of the accelerated kernel are used to program the whole architecture prior to its execution.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Concurrency">Concurrency</h2></div>
<p>A dataflow network is a network of concurrently executing processes or automata that can communicate by sending data over <i>channels</i> (see <a href="Message_passing" title="Message passing">message passing</a>.)
</p><p>In <a href="Kahn_process_networks" title="Kahn process networks">Kahn process networks</a>, named after <a href="Gilles_Kahn" title="Gilles Kahn">Gilles Kahn</a>, the processes are <i>determinate</i>. This implies that each determinate process computes a <a href="Continuous_function" title="Continuous function">continuous function</a> from input streams to output streams, and that a network of determinate processes is itself determinate, thus computing a continuous function. This implies that the behavior of such networks can be described by a set of recursive equations, which can be solved using <a href="Fixed_point_theory" class="mw-redirect" title="Fixed point theory">fixed point theory</a>. The movement and transformation of the data is represented by a series of shapes and lines.
</p>
<div class="mw-heading mw-heading2"><h2 id="Other_meanings">Other meanings</h2></div>
<p>Dataflow can also refer to:
</p>
<ul><li><a href="Power_BI" class="mw-redirect" title="Power BI">Power BI</a> Dataflow, a <a href="Power_Query" title="Power Query">Power Query</a> implementation in the cloud used for transforming source data into <a href="Data_cleansing" title="Data cleansing">cleansed</a> Power BI Datasets to be used by Power BI report developers through the <a href="Microsoft_Dataverse" class="mw-redirect" title="Microsoft Dataverse">Microsoft Dataverse</a> (formerly called Microsoft Common Data Service).</li>
<li><a href="Google_Cloud_Dataflow" title="Google Cloud Dataflow">Google Cloud Dataflow</a>, a fully managed service for executing Apache Beam pipelines within the Google Cloud Platform ecosystem.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<p><span class="noviewer" typeof="mw:File"></span> The dictionary definition of <a href="https://en.wiktionary.org/wiki/dataflow" class="extiw external" title="wiktionary:dataflow"><i>dataflow</i></a> at Wiktionary
</p>
<ul><li><a href="Binary_Modular_Dataflow_Machine" title="Binary Modular Dataflow Machine">Binary Modular Dataflow Machine</a> (BMDFM)</li>
<li><a href="Communicating_sequential_processes" title="Communicating sequential processes">Communicating sequential processes</a></li>
<li><a href="Complex_event_processing" title="Complex event processing">Complex event processing</a></li>
<li><a href="Data-flow_diagram" title="Data-flow diagram">Data-flow diagram</a></li>
<li><a href="Data-flow_analysis" title="Data-flow analysis">Data-flow analysis</a>, a type of program analysis</li>
<li><a href="Data_stream" title="Data stream">Data stream</a></li>
<li><a href="Dataflow_programming" title="Dataflow programming">Dataflow programming</a> (a programming language paradigm)</li>
<li><a href="Erlang_(programming_language)" title="Erlang (programming language)">Erlang (programming language)</a></li>
<li><a href="Flow-based_programming" title="Flow-based programming">Flow-based programming</a> (FBP)</li>
<li><a href="Flow_control_(data)" title="Flow control (data)">Flow control (data)</a></li>
<li><a href="Functional_reactive_programming" title="Functional reactive programming">Functional reactive programming</a></li>
<li><a href="Lazy_evaluation" title="Lazy evaluation">Lazy evaluation</a></li>
<li><a href="Lucid_(programming_language)" title="Lucid (programming language)">Lucid (programming language)</a></li>
<li><a href="Oz_(programming_language)" title="Oz (programming language)">Oz (programming language)</a></li>
<li><a href="Packet_flow" class="mw-redirect" title="Packet flow">Packet flow</a></li>
<li><a href="Pipeline_(computing)" title="Pipeline (computing)">Pipeline (computing)</a></li>
<li><a href="Pure_Data" title="Pure Data">Pure Data</a></li>
<li><a href="State_transition" class="mw-redirect" title="State transition">State transition</a></li>
<li><a href="TensorFlow" title="TensorFlow">TensorFlow</a></li>
<li><a href="Theano_(software)" title="Theano (software)">Theano</a></li>
<li><a href="Ward-Mellor_methodology" class="mw-redirect" title="Ward-Mellor methodology">Ward-Mellor methodology</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-sig-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-sig_1-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFSchwarzkopf2020" class="citation web cs1">Schwarzkopf, Malte (7 March 2020). <a rel="nofollow" class="external text" href="https://www.sigops.org/2020/the-remarkable-utility-of-dataflow-computing/">"The Remarkable Utility of Dataflow Computing"</a>. <i>ACM SIGOPS</i><span class="reference-accessdate">. Retrieved <span class="nowrap">31 July</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.jonathanbeard.io/blog/2015/09/19/streaming-and-dataflow.html">A Short Intro to Stream Processing</a></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite id="CITEREFParasharRainaShaoChen2019" class="citation book cs1">Parashar, Angshuman; Raina, Priyanka; Shao, Yakun Sophia; Chen, Yu-Hsin; Ying, Victor A.; Mukkara, Anurag; Venkatesan, Rangharajan; Khailany, Brucek; Keckler, Stephen W.; Emer, Joel (2019). "Timeloop: A Systematic Approach to DNN Accelerator Evaluation". <i>2019 IEEE International Symposium on Performance Analysis of Systems and Software (ISPASS)</i>. pp. <span class="nowrap">304–</span>315. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FISPASS.2019.00042">10.1109/ISPASS.2019.00042</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-7281-0746-2</bdi>.</cite></span>
</li>
</ol></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-25" href="https://en.wikipedia.org/wiki/?title=Dataflow&oldid=1302387372">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>